//
//  Date+Extension.swift
//  HotNews
//
//  Created by YYY on 2017/11/23.
//  Copyright © 2017年 成品家（北京）网路科技有限公司. All rights reserved.
//

import Foundation

//日期格式化器，不要频繁的释放和创建，影响性能（单例）
private let dateFormatter = DateFormatter()
//当前日历对象
private let calendar = Calendar.current

extension Date
{
    //在Swift中，如果定义结构体的类函数，使用static修饰，静态函数。
    /// 处理日期
    ///
    /// - Parameter interval: 时间间隔秒（计算与当前系统的时间差）
    /// - Returns: 日期字符串
    static func dateConvertToString(interval: TimeInterval) -> String
    {
        let date = Date(timeIntervalSinceNow: interval)
        //设置日期格式
        dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
        //返回日期字符串
        return dateFormatter.string(from: date)
    }
    
    
    /// 处理日期字符串
    ///
    /// - Parameter string: 日期字符串 Mon Nov 27 13:37:29 +0800 2017
    /// - Returns: 日期
    static func stringConvertToDate(string: String) -> Date?
    {
        dateFormatter.dateFormat = "EEE MMM d HH:mm:ss Z yyyy"
        dateFormatter.locale = Locale(identifier: "en")
        return dateFormatter.date(from: string)
    }
    /*
     刚刚（一分钟内）
     x分钟前（一小时内）
     x小时前（当天）
     昨天 HH:mm(昨天)
     MM-dd HH:mm（一年内）
     yyyy-MM-dd HH:mm(更早期)
     */
    var dateDescriptionString: String
    {
        if calendar.isDateInToday(self)
        {
            //今天
            let interval = -Int(self.timeIntervalSinceNow)
            if interval < 60
            {
                return "刚刚"
            }
            else if interval < 3600
            {
                return "\(interval/60) 分钟前"
            }
            return "\(interval/3600) 小时前"
        }
        
        var dateForm = " HH:mm"
        if calendar.isDateInYesterday(self)
        {
            //昨天
            dateForm = "昨天" + dateForm
        }
        else
        {
            dateForm = "MM-dd" + dateForm
            let year = calendar.component(.year, from: self)
            let thisYear = calendar.component(.year, from: Date())
            if year != thisYear
            {
                dateForm = "yyyy-" + dateForm
            }
        }
        dateFormatter.dateFormat = dateForm
        return dateFormatter.string(from: self)
    }
}
